package com.briup.sxau.service.impl;

import com.briup.sxau.bean.Student;
import com.briup.sxau.dao.IStudentRepository;
import com.briup.sxau.service.IStudentService;
import com.briup.sxau.util.SxauException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.Objects;
import java.util.Optional;

@Service
public class StudentServiceImpl implements IStudentService {
   @Autowired
    IStudentRepository studentRepository;

    @Override
    public Page<Student> findAll(int page, int pageSize) {
//        构建分页对象
        PageRequest request = PageRequest.of(page - 1, pageSize);
        Page<Student> students = studentRepository.findAll(request);
        return students;
    }

    @Override
    public Student findById(int id)  {
        Optional<Student> optional = studentRepository.findById(id);
//        避免NoSuchElementException 如果其中没有元素 就返回一个null
        Student student = optional.orElse(null);
//        校验数据  id是不是存在的
        if(Objects.isNull(student)){
            throw  new SxauException("所选数据不存在");
        }else {
            return student;
        }

    }

    @Override
    public void deleteById(int id) {
//        参数类型要正确 即使id不存在 删除业务也不受影响
        studentRepository.deleteById(id);
    }

    @Override
//    要求一个班的学生名字不能相同  如果名字相同不能保存
//    要在插入之前去检索数据 看名字是否被占用

    public void save(Student student) {
//先通过名字去查询看是否有数据
        Student obj = studentRepository.findByName(student.getName());
//        obj 为空 数据库查询结果为空  ==》 名字没有被占用==》保存数据
        if (Objects.isNull(obj)){
            studentRepository.save(student);
        }else {
            throw  new SxauException("用户名重复，请更换后重试");
        }

    }

}
